/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.xd.domain.query;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 *
 *
 * @author wcs
 * @date 2021-3-4
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class DocumentReleaseQuery {

    private static final int DEFAULT_PAGE_SIZE = 20;
    private static final int MAX_PAGE_SIZE = 1000;

    /**
     * 返回记录的起始位置。
     */
    private Integer offset;

    /**
     * 返回记录的个数。
     */
    private Integer rows;

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     */
    public DocumentReleaseQuery(Integer pageIndex) {
        this(pageIndex, DEFAULT_PAGE_SIZE);
    }

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     * @param    pageSize    页大小
     */
    public DocumentReleaseQuery(Integer pageIndex, Integer pageSize) {
        int index = pageIndex == null ? 0 : pageIndex;
        int size = pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
        this.offset = index * size;
        this.rows = size;
    }

    /**
     * 构造符合条件的查询对象，仅返回一条
     *
     * @return
     */
    public static DocumentReleaseQueryBuilder one() {
        return DocumentReleaseQuery.builder().offset(0).rows(1);
    }

    /**
     * 构造符合条件的查询对象，控制返回的记录上限
     *
     * @return
     */
    public static DocumentReleaseQueryBuilder max() {
        return DocumentReleaseQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
    }

    /**
     * 文件id
     */
    private Long documentId;
    /**
     * 流程id
     */
    private Long documentFlowId;
    /**
     * 流程id
     */
    private List<Long> documentFlowIdList;
    /**
     * 文件发行id
     */
    private Long documentReleaseId;
    /**
     * 流程类型：0-未定义，1-新增流程，2-修订流程，3-作废流程，4-下载审批流程，5-借阅流程
     */
    private Integer flowType;
    /**
     * 接收用户Id
     */
    private Long receiveUserId;
    /**
     * 文件版本
     */
    private String documentVersion;
    /**
     * 文件等级
     */
    private Integer documentLevel;
    /**
     * 文件属性
     */
    private String documentProperty;
    /**
     * 文件编号集合
     */
    private List<String> documentCodeList;

    /**
     * 接收者Id集合
     */
    private List<Long> receiveIdList;
    /**
     * 接收类型
     */
    private Integer receiveType;
    /**
     * 接收用户分组Id
     */
    private Long receiveUserGroupId;
    /**
     * 状态：0-放行，1-过时，2-作废
     */
    private Integer status;
    /**
     * 权限（共享文件权限定义）
     */
    private Integer permission;
    /**
     * 租户Id，0表示不指定
     */
    private Long tenantId;
    /**
     * 生效时间
     */
    private LocalDate effectDate;
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    /**
     * 生效标识：0-未生效，1-已生效
     */
    private Boolean effectFlag;
    /**
     * 删除标识：0-未删除，1-已删除
     */
    private Boolean deleteFlag;
    /**
     * 租户Id，0表示不指定
     */
    private String documentCode;
    /**
     * 使用者用户Id
     */
    private Long useUserId;
    /**
     * 文件ID
     */
    private Collection<Long> documentIdS;
    /**
     */
    private List<Boolean> effectFlagList;
    /**
     *
     */
    private List<Integer> receiveTypeList;

    /**
     * 生效查询接口标识
     */
    private Boolean effectiveFlag;
    /**
     * 文件发行ID
     */
    private Collection<Long> documentReleaseIdS;

    public DocumentReleaseQuery addEffectFlag(Boolean effectFlag) {
        if (effectFlagList == null) {
            effectFlagList = new ArrayList<>();
        }
        effectFlagList.add(effectFlag);
        return this;
    }
}
